
//todo
// 假设有k个人质和k个绑匪围成一圈。人质的编号从1到k，绑匪的编号从k+1到2k。
// 从编号1开始，每次从其中选出第m个人(隔m-1选出一人)出列。
// 希望求出m的最小值，使得最先出列的k个人都是绑匪，即都是编号从k+1到2k的人。
#include "iostream"
#include "vector"
#include "unordered_map"
#include "algorithm"

int month_day_cnt(int y, int m) {
    static char arr[12] = {31, 28, 31, 30, 31, 30,
                           31, 31, 30, 31, 30, 31};
    if (m == 2 &&
        ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0))
        return 29;

    return arr[m - 1];
}

int main() {
    int y, m, d, left;//组数
//    int
//    is_huiwen(1441,10);
    while (std::cin >> y >> m >> d >> left) {
        while (left) {
            if(left+d<= month_day_cnt(y,m)){
                d+=left;
                break;
            }else{
                //32  31 -1
                left-=month_day_cnt(y,m)-d+1;
                d=1;
                m++;
                if(m==13){
                    m=1;
                    y++;
                }
            }
        }
        printf("%d %d %d\n",y,m,d);
    }
//    while(1){}
    return 0;
}

